package com.ruoyi.pos.domain.payment;

import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.DecimalMin;
import java.math.BigDecimal;

/**
 * POS支付方式定义实体类
 * 
 * 用于管理POS系统中的支付方式基础定义，包括支付类型、费率、限额等
 * 不包含柜组关系，柜组关系由单独的关系表管理
 * 
 * @author POS System
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class PosPaymentType extends BaseEntity {
    
    private static final long serialVersionUID = 1L;

    /**
     * 支付方式ID（主键）
     */
    private Long typeId;

    /**
     * 支付方式编码
     * 
     * 如：CASH、CARD、ALIPAY、WECHAT、POINTS等
     */
    @Excel(name = "支付方式编码")
    @NotBlank(message = "支付方式编码不能为空")
    @Size(max = 20, message = "支付方式编码长度不能超过20个字符")
    private String typeCode;

    /**
     * 支付方式名称
     * 
     * 如：现金、银行卡、支付宝、微信支付、积分支付等
     */
    @Excel(name = "支付方式名称")
    @NotBlank(message = "支付方式名称不能为空")
    @Size(max = 50, message = "支付方式名称长度不能超过50个字符")
    private String typeName;

    /**
     * 支付方式图标
     * 
     * 图标文件路径或URL
     */
    @Excel(name = "支付方式图标")
    @Size(max = 100, message = "支付方式图标长度不能超过100个字符")
    private String typeIcon;

    /**
     * 排序号
     * 
     * 用于控制支付方式在界面上的显示顺序
     */
    @Excel(name = "排序号")
    private Integer sortOrder;

    /**
     * 是否启用(0否 1是)
     */
    @Excel(name = "是否启用", readConverterExp = "0=否,1=是")
    private String isEnabled;
 

    /**
     * 配置参数(JSON格式)
     * 
     * 存储支付方式的特殊配置参数
     */
    @Excel(name = "配置参数")
    private String configParams;

    /**
     * 备注
     */
    @Excel(name = "备注")
    @Size(max = 500, message = "备注长度不能超过500个字符")
    private String remark;

    // ==================== 业务方法 ====================

    /**
     * 判断是否启用
     */
    public boolean isEnabled() {
        return "1".equals(this.isEnabled);
    }

    // ==================== 备用扩展字段 ====================
    
    /**
     * 备用字段1
     */
    private String reserved1;

    /**
     * 备用字段2
     */
    private String reserved2;

    /**
     * 备用字段3
     */
    private String reserved3;

    /**
     * 备用字段4
     */
    private String reserved4;

    /**
     * 备用字段5
     */
    private String reserved5;
}